大家好啊~今天又要來介紹好玩的東西,不知道大家有沒有想過,今天我們瀏覽網頁時,我們點了一個連結後,到了一個跟觀望很像的網頁,但其實這網頁是有人惡意寫的,像這種釣魚網站的問題我們一怎麼解決
瀏覽器安全性可防止網頁向提供網頁的不同網域提出要求。 此限制稱為相同原始來源原則。 相同的來源原則可防止惡意網站從另一個網站讀取敏感性資料。 有時候,您可能想要允許其他網站對您的應用程式提出跨原始來源要求
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
builder.Services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
policy =>{ policy.WithOrigins("http://example.com","http://www.contoso.com");
}
);
});
這裡我們限定的URL 就是WithOrigins裡的http://example.com 和 http://www.contoso.com
再來我們還要記得去使用它
app.UseCors(MyAllowSpecificOrigins);
使用端點路由時,CORS中介軟體必須設定為在 對 和 UseEndpoints 的呼叫 UseRouting 之間執行
端點路由是使用 RequireCors 啟用個別端點的 CORS不支援自動預檢要求
這裡我們在端點的地方去使用Cors,記得要使用在UseCors 和UseAuthorization 之後
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/echo",
context => context.Response.WriteAsync("echo"))
.RequireCors(MyAllowSpecificOrigins);
endpoints.MapControllers()
.RequireCors(MyAllowSpecificOrigins);
endpoints.MapGet("/echo2",
context => context.Response.WriteAsync("echo2"));
endpoints.MapRazorPages();
});
接著我們在上面設定好我們的CORS 後接下來就是要到使用 [EnableCors] 屬性啟用 CORS,並將具名原則套用至只有需要 CORS 的端點可提供最精細的控制,我們可以在EnableCors 加上指定的具名
使用範圍
[EnableCors]
[HttpGet("{id}")]
public async Task<ActionResult<User>> GetUser(int id)
{
var user = await _context.Users.FindAsync(id);
if (user == null)
{
return NotFound();
}
return user;
}
[EnableCors("AnotherPolicy")]
[HttpPut("{id}")]
public async Task<IActionResult> PutUser(int id, User user)
{
if (id != user.Id)
{
return BadRequest();
}
_context.Entry(user).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
要是我們不想要使用CORS 的話可以用DisableCors
今天的話就先到這邊,我們明天見~~~
參考資料:
https://learn.microsoft.com/zh-tw/aspnet/core/security/cors?view=aspnetcore-6.0